const { exec } = require('child_process');
const path = require('path');

// 项目根目录
const ROOT_DIR = path.resolve(__dirname, '..');

// 执行 git 命令的函数
function executeGitCommand(command) {
  return new Promise((resolve, reject) => {
    exec(command, { cwd: ROOT_DIR }, (error, stdout, stderr) => {
      if (error) {
        console.error(`执行错误: ${error}`);
        reject(error);
        return;
      }
      resolve(stdout.trim());
    });
  });
}

// 检查仓库状态
async function checkGitStatus() {
  try {
    const status = await executeGitCommand('git status --porcelain');
    return status.length > 0;
  } catch (error) {
    console.error('检查git状态失败:', error);
    return false;
  }
}

// 提交并推送更改
async function commitAndPush() {
  try {
    const timestamp = new Date().toLocaleString('zh-CN');
    await executeGitCommand('git add .');
    await executeGitCommand(`git commit -m "auto commit: ${timestamp}"`);
    await executeGitCommand('git push origin main');
    console.log('✅ 代码已自动提交并推送');
  } catch (error) {
    console.error('❌ 提交失败:', error);
  }
}

// 主函数
async function main() {
  console.log('🔄 开始监控代码变更...');
  
  setInterval(async () => {
    const hasChanges = await checkGitStatus();
    if (hasChanges) {
      console.log('📝 检测到代码变更，1分钟后将自动提交...');
      setTimeout(commitAndPush, 60000);
    }
  }, 10000); // 每10秒检查一次
}

// 启动监控
main().catch(console.error);